package com.cy.dda.service.message.impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.cy.dda.comm.annotation.Message;
import com.cy.dda.comm.utils.CommonUtils;
import com.cy.dda.model.dto.message.CasesStatusNotificationMessageDTO;
import com.cy.dda.model.dto.wechat.WechatMessageTemplateDTO;
import com.cy.dda.model.dto.wechat.WechatMessageTemplateDataDTO;
import com.cy.dda.model.enums.MessageType;
import com.cy.dda.model.enums.cases.CasesStatus;
import com.cy.dda.model.enums.wechat.WechatMessageTemplate;

import lombok.extern.slf4j.Slf4j;

/**
 * 委案状态通知消息发送
 *
 * @author: tanyilin
 * @create: 2018年12月11日 下午4:19:58
 */
@Slf4j
@Message(type = MessageType.CASES_STATUS_NOTIFICATION)
@Service
public class CasesStatusNotificationMessageImpl extends MessageServiceImpl {

	/**
	 * 真正执行发送消息的方法
	 * 
	 * @param message
	 */
	@Override
	public void execute(String message) {

		Long casesId = Long.valueOf(message);
		CasesStatusNotificationMessageDTO template = casesMapper.selectCasesStatusNotificationMessageDTO(casesId);
		//发送微信消息模板
		sendWechatMessageTemplate(template);
    }
	
	/**
	 * 发送微信消息模板
	 * 
	 * @param template
	 */
	private void sendWechatMessageTemplate(CasesStatusNotificationMessageDTO template) {
		
		if(template.getOpenId() == null) {
			log.info("委案[编号={}]状态更新，由于催收员用户没有绑定微信，无法发送微信消息。", template.getCasesId());
            return;
		}
		//委案状态
		CasesStatus casesStatus = template.getCasesStatus();
		if(casesStatus == null) {
			log.info("委案[编号={}]状态异常，不发生微信消息", template.getCasesId());
            return;
		}
		
		//封装参数map
		WechatMessageTemplateDataDTO first = new WechatMessageTemplateDataDTO();
		WechatMessageTemplateDataDTO remark = new WechatMessageTemplateDataDTO();
		if(CasesStatus.ACCEPT_WAIT.equals(casesStatus)) {
			//待接受
			first.setValue("您好，您有新的委案等待处理。");
			remark.setValue("请及时登录系统接受委案，如有疑问请咨询后台运营人员。");
		}else if(CasesStatus.END.equals(casesStatus)) {
			//委案结束
			first.setValue("您好，您的客户 " + template.getCustomerName() + " 结案申请已通过。");
			remark.setValue("如有疑问请咨询后台运营人员。");
		}else {
			first.setValue("您好，您有新的案件状态通知");
			remark.setValue("如有疑问请咨询后台运营人员。");
		}
		
		WechatMessageTemplateDataDTO keyword1 = new WechatMessageTemplateDataDTO();
		keyword1.setValue(template.getCasesId().toString());
		
		WechatMessageTemplateDataDTO keyword2 = new WechatMessageTemplateDataDTO();
		keyword2.setValue(casesStatus.getText());
		
		WechatMessageTemplateDataDTO keyword3 = new WechatMessageTemplateDataDTO();
		keyword3.setValue(CommonUtils.dateFormat2(template.getUpdateTime()));
		
		Map<String, WechatMessageTemplateDataDTO> data = new HashMap<>();
		data.put("first", first);
		data.put("keyword1", keyword1);
		data.put("keyword2", keyword2);
		data.put("keyword3", keyword3);
		data.put("remark", remark);
		
		WechatMessageTemplateDTO wechatMessageTemplateDTO = new WechatMessageTemplateDTO();
		wechatMessageTemplateDTO.setOpneId(template.getOpenId());
		wechatMessageTemplateDTO.setTemplateId(WechatMessageTemplate.CASES_STATUS_NOTIFICATION.getTemplateId());
		wechatMessageTemplateDTO.setData(data);
		
		//发送微信消息模板
		wechatService.sendTemplateMessage(wechatMessageTemplateDTO);
	}
	
}
